import { AxiosDelegateDefault, errorCreate } from '@/d2admin/delegate/axios'
import { AxiosResponse } from 'axios'

/**
 * json api
 * axios 请求重构
 */
class AxiosDelegateImpl extends AxiosDelegateDefault {
  /**
   * 请求返回验证
   * @param response
   * @returns
  */
  beforeResponse(response: AxiosResponse): any {
    // dataAxios 是 axios 返回数据中的 data
    const dataAxios = response.data
    // 这个状态码是和后端约定的
    const { code } = dataAxios
    // 根据 code 进行判断
    if (code === undefined) {
      // 如果没有 code 代表这不是项目后端开发的接口 比如可能是 D2Admin 请求最新版本
      return dataAxios
    } else {
      // 有 code 代表这是一个后端接口 可以进行进一步的判断
      switch (code) {
        case 200:
          // [ 示例 ] code === 0 代表没有错误
          return dataAxios
        case 'xxx':
          // [ 示例 ] 其它和后台约定的 code
          errorCreate(`[ code: xxx ] ${dataAxios.msg}: ${response.config.url}`)
          break
        default:
          // 不是正确的 code
          errorCreate(`${dataAxios.msg}: ${response.config.url}`)
          break
      }
    }
  }
}
export default new AxiosDelegateImpl()
